{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The autoreload extension is already loaded. To reload it, use:\n",
      "  %reload_ext autoreload\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "%load_ext autoreload\n",
    "%autoreload 2\n",
    "# importlib.reload(utils.matplot)\n",
    "from utils.matplot import histogram\n",
    "np.random.seed(42)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 测试数据生成"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(10000, 2)\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxUAAAGGCAYAAAANcKzOAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAtsklEQVR4nO3de3RU5b3/8c8kIQnEZMKluVUgqCAgWJBoHMULJSU2ORaUHuUQbjYVjw0qRNRwRO4aiIoICggHCFYRpQeVQkUwqBSIgAgKAQMqlOsEaiRDsBlCsn9/+GOWA2jJ7JnMTPJ+rTVrdZ797L2/+1mzgp8++9nbYhiGIQAAAADwUIi/CwAAAAAQ3AgVAAAAAEwhVAAAAAAwhVABAAAAwBRCBQAAAABTCBUAAAAATCFUAAAAADCFUAEAAADAFEIFAAAAAFMIFQAAAABMIVQAAALesWPHlJeXp169eik6OloWi0UfffSRv8sCAPx/hAoAQMArLS3VtGnTdOTIEXXt2tXf5QAAzkOoAAAEvB49eujbb7/V3r17lZub6+9yAADnIVQAAPzmX//6lzp27KiOHTvqX//6l6u9vLxciYmJuummm1RTU6Po6Gi1aNHCj5UCAH4OoQIA4DdNmzbV4sWL9dVXX+nJJ590tefk5KiiokKFhYUKDQ31Y4UAgEsR5u8CAACNW2pqqh5//HFNmzZNd911l8rKyrR06VLNmDFDHTp08Hd5AIBLQKgAAPjdhAkTtHLlSg0dOlSVlZW67bbb9PDDD/u7LADAJeL2JwCA34WHh2vhwoXav3+/Tp06pUWLFslisfi7LADAJSJUAAACwvvvvy9Jqqqq0r59+/xcDQCgLggVAAC/++KLLzRp0iTdd9996t69u/74xz+qoqLC32UBAC4RoQIA4FfV1dUaNmyYkpKS9OKLL6qwsFBlZWUaNWqUv0sDAFwiFmoDAPxqypQp2rFjh4qKihQdHa1rr71W48aN09ixY/X73/9eGRkZrn6SVFJSIkn685//rA0bNkiSxo4d65/iAQCSJIthGIa/iwAANE6fffaZUlNT9eCDD2rmzJmu9pqaGtlsNh05ckQlJSWKjY392YXb/FMGAP5FqAAAAABgCmsqAAAAAJhCqAAAAABgCqECAAAAgCmECgAAAACmECoAAAAAmEKoAAAAAGAKoeISGIYhh8PBc9ABAACAiyBUXIJTp07JarXq1KlT/i4FAAAACDiECgAAAACmECoAAAAAmEKoAAAAAGAKoQIAAACAKX4NFevXr9edd96ppKQkWSwWvfPOO27bDcPQuHHjlJiYqKZNmyotLU379u1z61NeXq6srCzFxMQoNjZW2dnZqqysdOvzxRdf6JZbblFkZKRat26tgoICX18aAAAA0Gj4NVScPn1av/rVr/Tyyy9fdHtBQYFmzpypuXPnavPmzYqKilJ6erqqqqpcfbKyslRSUqK1a9dq5cqVWr9+vYYPH+7a7nA41KdPH7Vt21bbtm3Ts88+qwkTJmjevHk+vz4AAACgMbAYAfLyBYvForffflv9+vWT9MMsRVJSkh599FGNHj1aklRRUaH4+HgVFhZqwIAB2rNnjzp37qytW7cqJSVFkrR69WplZGTo8OHDSkpK0pw5c/Tkk0/KbrcrPDxckpSXl6d33nlHX3755SXV5nA4ZLVaVVFRoZiYGO9fPAAAABDEAnZNxf79+2W325WWluZqs1qtSk1NVXFxsSSpuLhYsbGxrkAhSWlpaQoJCdHmzZtdfW699VZXoJCk9PR0lZaW6rvvvqunqwEAAAAarjB/F/BT7Ha7JCk+Pt6tPT4+3rXNbrcrLi7ObXtYWJhatGjh1qddu3YXHOPctubNm19wbqfTKafT6frucDhMXg0AAADQcAXsTIU/5efny2q1uj6tW7f2d0kAAABAwArYUJGQkCBJKisrc2svKytzbUtISNDx48fdtp89e1bl5eVufS52jB+f43xjxoxRRUWF63Po0CHzFwQAAAA0UAEbKtq1a6eEhAQVFRW52hwOhzZv3iybzSZJstlsOnnypLZt2+bqs27dOtXW1io1NdXVZ/369aqurnb1Wbt2ra6++uqL3vokSREREYqJiXH7AAAAALg4v4aKyspK7dixQzt27JD0w+LsHTt26ODBg7JYLBo5cqSmTJmiFStWaOfOnRoyZIiSkpJcT4jq1KmT7rjjDt1///3asmWLNm7cqBEjRmjAgAFKSkqSJA0cOFDh4eHKzs5WSUmJ3nzzTb344ovKzc3101UDAAAADYtfHyn70UcfqVevXhe0Dx06VIWFhTIMQ+PHj9e8efN08uRJ9ezZU7Nnz1aHDh1cfcvLyzVixAj99a9/VUhIiPr376+ZM2fqsssuc/X54osvlJOTo61bt6pVq1Z66KGH9MQTT1xynTxSFgAAAPhpAfOeikBGqAAAAAB+WsA+Uhb4SROsHuxT4f06AAAAICmAF2oDAAAACA6ECgAAAACmECoAAAAAmEKoAAAAAGAKoQIAAACAKYQKAAAAAKYQKgAAAACYQqgAAAAAYAqhAgAAAIAphAoAAAAAphAqAAAAAJhCqAAAAABgCqECAAAAgCmECgAAAACmECoAAAAAmEKoAAAAAGAKoQIAAACAKYQKAAAAAKYQKgAAAACYQqgAAAAAYEqYvwtAAzHB6u8KAAAA4CfMVAAAAAAwhVABAAAAwBRCBQAAAABTCBUAAAAATCFUAAAAADCFUAEAAADAFEIFAAAAAFMIFQAAAABMIVQAAAAAMIVQAQAAAMAUQgUAAAAAU8L8XQBQLyZYPdinwvt1AAAANEDMVAAAAAAwhVABAAAAwBRufwKCVHLeKq8f88DUTK8fEwAANHyECuCneLIOQ2ItBgAAaHS4/QkAAACAKcxUAHDhlioAAOAJZioAAAAAmEKoAAAAAGAKoQIAAACAKYQKAAAAAKawUBuoB75YAA0AABAomKkAAAAAYAozFQB8ylezNDyqFgCAwMFMBQAAAABTCBUAAAAATCFUAAAAADCFUAEAAADAFEIFAAAAAFMCOlTU1NToqaeeUrt27dS0aVNdeeWVmjx5sgzDcPUxDEPjxo1TYmKimjZtqrS0NO3bt8/tOOXl5crKylJMTIxiY2OVnZ2tysrK+r4cAAAAoEEK6FAxbdo0zZkzRy+99JL27NmjadOmqaCgQLNmzXL1KSgo0MyZMzV37lxt3rxZUVFRSk9PV1VVlatPVlaWSkpKtHbtWq1cuVLr16/X8OHD/XFJAAAAQIMT0O+p2LRpk/r27avMzB+eR5+cnKw33nhDW7ZskfTDLMWMGTM0duxY9e3bV5L06quvKj4+Xu+8844GDBigPXv2aPXq1dq6datSUlIkSbNmzVJGRoaee+45JSUl+efiAAAAgAYioGcqbrrpJhUVFWnv3r2SpM8//1wbNmzQb3/7W0nS/v37ZbfblZaW5trHarUqNTVVxcXFkqTi4mLFxsa6AoUkpaWlKSQkRJs3b67HqwEAAAAapoCeqcjLy5PD4VDHjh0VGhqqmpoaPf3008rKypIk2e12SVJ8fLzbfvHx8a5tdrtdcXFxbtvDwsLUokULV5/zOZ1OOZ1O13eHw+G1awIAAAAamoCeqXjrrbf0+uuva8mSJfrss8+0ePFiPffcc1q8eLFPz5ufny+r1er6tG7d2qfnAwAAAIJZQIeKxx57THl5eRowYIC6du2qwYMHa9SoUcrPz5ckJSQkSJLKysrc9isrK3NtS0hI0PHjx922nz17VuXl5a4+5xszZowqKipcn0OHDnn70gAAAIAGI6BDxffff6+QEPcSQ0NDVVtbK0lq166dEhISVFRU5NrucDi0efNm2Ww2SZLNZtPJkye1bds2V59169aptrZWqampFz1vRESEYmJi3D4AAAAALi6g11Tceeedevrpp9WmTRtdc8012r59u6ZPn64//OEPkiSLxaKRI0dqypQpat++vdq1a6ennnpKSUlJ6tevnySpU6dOuuOOO3T//fdr7ty5qq6u1ogRIzRgwACe/AQAAAB4QUCHilmzZumpp57Sn/70Jx0/flxJSUl64IEHNG7cOFefxx9/XKdPn9bw4cN18uRJ9ezZU6tXr1ZkZKSrz+uvv64RI0aod+/eCgkJUf/+/TVz5kx/XBIAAADQ4FiMH7+eGhflcDhktVpVUVHBrVA/ZYLV3xUEjgkVFzQl563yQyGoqwNTM/1dAgAAQSmg11QAAAAACHyECgAAAACmECoAAAAAmEKoAAAAAGBKQD/9CQhKF1m0fiDyIv1+JLlqiY+KAQAA8D1mKgAAAACYwkwFLsTjYQEAAFAHzFQAAAAAMIVQAQAAAMAUQgUAAAAAUwgVAAAAAEwhVAAAAAAwhVABAAAAwBRCBQAAAABTCBUAAAAATCFUAAAAADCFN2oDwP+XnLfK68c8MDXT68cEACDQMFMBAAAAwBRCBQAAAABTCBUAAAAATCFUAAAAADCFUAEAAADAFEIFAAAAAFMIFQAAAABMIVQAAAAAMIVQAQAAAMAUQgUAAAAAUwgVAAAAAEwhVAAAAAAwhVABAAAAwBRCBQAAAABTCBUAAAAATCFUAAAAADCFUAEAAADAFEIFAAAAAFMIFQAAAABMIVQAAAAAMIVQAQAAAMCUMH8XAEA6EDmwzvskVy3xQSUAAAB1x0wFAAAAAFMIFQAAAABMIVQAAAAAMIVQAQAAAMAUQgUAAAAAUwgVAAAAAEwhVAAAAAAwhfdUAIAPJeet8voxD0zN9PoxAQAwg5kKAAAAAKYQKgAAAACYQqgAAAAAYIpHoeKbb77xdh0AAAAAgpRHoeKqq65Sr1699Nprr6mqqsrbNQEAAAAIIh6Fis8++0zXXnutcnNzlZCQoAceeEBbtmzxdm2SpCNHjmjQoEFq2bKlmjZtqq5du+rTTz91bTcMQ+PGjVNiYqKaNm2qtLQ07du3z+0Y5eXlysrKUkxMjGJjY5Wdna3Kykqf1AsAAAA0Nh6Fim7duunFF1/U0aNHtXDhQh07dkw9e/ZUly5dNH36dJ04ccIrxX333Xe6+eab1aRJE7333nvavXu3nn/+eTVv3tzVp6CgQDNnztTcuXO1efNmRUVFKT093W0GJSsrSyUlJVq7dq1Wrlyp9evXa/jw4V6pEQAAAGjsLIZhGGYP4nQ6NXv2bI0ZM0ZnzpxReHi47rnnHk2bNk2JiYkeHzcvL08bN27U3//+94tuNwxDSUlJevTRRzV69GhJUkVFheLj41VYWKgBAwZoz5496ty5s7Zu3aqUlBRJ0urVq5WRkaHDhw8rKSnp39bhcDhktVpVUVGhmJgYj68naEyw+rsCXILkqiX+LgF+wnsqAACBxtTTnz799FP96U9/UmJioqZPn67Ro0fr66+/1tq1a3X06FH17dvXVHErVqxQSkqK/vM//1NxcXHq3r275s+f79q+f/9+2e12paWludqsVqtSU1NVXFwsSSouLlZsbKwrUEhSWlqaQkJCtHnzZlP1AQAAAPDwjdrTp0/XokWLVFpaqoyMDL366qvKyMhQSMgPGaVdu3YqLCxUcnKyqeK++eYbzZkzR7m5ufqf//kfbd26VQ8//LDCw8M1dOhQ2e12SVJ8fLzbfvHx8a5tdrtdcXFxbtvDwsLUokULV5/zOZ1OOZ1O13eHw2HqOgAAAICGzKNQMWfOHP3hD3/QsGHDfvL2pri4OC1YsMBUcbW1tUpJSdEzzzwjSerevbt27dqluXPnaujQoaaO/XPy8/M1ceJEnx0fAAAAaEg8uv1p3759GjNmzM+ulzg3m2BGYmKiOnfu7NbWqVMnHTx4UJKUkJAgSSorK3PrU1ZW5tqWkJCg48ePu20/e/asysvLXX3ON2bMGFVUVLg+hw4dMnUdAAAAQEPmUahYtGiRli1bdkH7smXLtHjxYtNFnXPzzTertLTUrW3v3r1q27atpB9us0pISFBRUZFru8Ph0ObNm2Wz2SRJNptNJ0+e1LZt21x91q1bp9raWqWmpl70vBEREYqJiXH7AAAAALg4j0JFfn6+WrVqdUF7XFyc61Ylbxg1apQ++eQTPfPMM/rqq6+0ZMkSzZs3Tzk5OZIki8WikSNHasqUKVqxYoV27typIUOGKCkpSf369ZP0w8zGHXfcofvvv19btmzRxo0bNWLECA0YMOCSnvwEAAAA4Od5tKbi4MGDateu3QXtbdu2dd2a5A3XX3+93n77bY0ZM0aTJk1Su3btNGPGDGVlZbn6PP744zp9+rSGDx+ukydPqmfPnlq9erUiIyNdfV5//XWNGDFCvXv3VkhIiPr376+ZM2d6rU4AAACgMfPoPRVt2rTRSy+9pN/97ndu7e+++65ycnJ0+PBhrxUYCHhPBQIR76lovHhPBQAg0Hh0+9N//dd/6eGHH9aHH36ompoa1dTUaN26dXrkkUc0YMAAb9cIAAAAIIB5dPvT5MmTdeDAAfXu3VthYT8cora2VkOGDPHqmgoAAAAAgc+jUBEeHq4333xTkydP1ueff66mTZuqa9eurqcyAQAAAGg8PAoV53To0EEdOnTwVi0AAAAAgpBHoaKmpkaFhYUqKirS8ePHVVtb67Z93bp1XikOAAAAQODzKFQ88sgjKiwsVGZmprp06SKLxeLtugAAAAAECY9CxdKlS/XWW28pIyPD2/UAAAAACDIePVI2PDxcV111lbdrAQAAABCEPAoVjz76qF588UV58N48AAAAAA2MR7c/bdiwQR9++KHee+89XXPNNWrSpInb9uXLl3ulOAA/7UDkwDrvw1u4AQCAL3gUKmJjY3XXXXd5uxYAAAAAQcijULFo0SJv1wEAAAAgSHm0pkKSzp49qw8++ECvvPKKTp06JUk6evSoKisrvVYcAAAAgMDn0UzFP/7xD91xxx06ePCgnE6nfvOb3yg6OlrTpk2T0+nU3LlzvV0nAAAAgADl0UzFI488opSUFH333Xdq2rSpq/2uu+5SUVGR14oDAAAAEPg8mqn4+9//rk2bNik8PNytPTk5WUeOHPFKYQAAAACCg0czFbW1taqpqbmg/fDhw4qOjjZdFAAAAIDg4dFMRZ8+fTRjxgzNmzdPkmSxWFRZWanx48crIyPDqwUCANwl563y+jEPTM30+jEBAI2HR6Hi+eefV3p6ujp37qyqqioNHDhQ+/btU6tWrfTGG294u0YAAAAAAcyjUHH55Zfr888/19KlS/XFF1+osrJS2dnZysrKclu4DQAAAKDh8yhUSFJYWJgGDRrkzVoAAAAABCGPQsWrr776s9uHDBniUTEAAAAAgo9HoeKRRx5x+15dXa3vv/9e4eHhatasGaECAAAAaEQ8eqTsd9995/aprKxUaWmpevbsyUJtAAAAoJHxKFRcTPv27TV16tQLZjEAAAAANGxeCxXSD4u3jx496s1DAgAAAAhwHq2pWLFihdt3wzB07NgxvfTSS7r55pu9UhgAAACA4OBRqOjXr5/bd4vFol/84hf69a9/reeff94bdQEAAAAIEh6FitraWm/XAQAAACBIeXVNBQAAAIDGx6OZitzc3EvuO336dE9OAQAAACBIeBQqtm/fru3bt6u6ulpXX321JGnv3r0KDQ3Vdddd5+pnsVi8UyUAAACAgOVRqLjzzjsVHR2txYsXq3nz5pJ+eCHefffdp1tuuUWPPvqoV4sEAAAAELgshmEYdd3pl7/8pdasWaNrrrnGrX3Xrl3q06dPg3tXhcPhkNVqVUVFhWJiYvxdTt1MsPq7AgSQ5Kol/i4BAerA1Ex/lwAACGIeLdR2OBw6ceLEBe0nTpzQqVOnTBcFAAAAIHh4FCruuusu3XfffVq+fLkOHz6sw4cP6//+7/+UnZ2tu+++29s1AgAAAAhgHq2pmDt3rkaPHq2BAwequrr6hwOFhSk7O1vPPvusVwsEAAAAENg8ChXNmjXT7Nmz9eyzz+rrr7+WJF155ZWKioryanEAAAAAAp+pl98dO3ZMx44dU/v27RUVFSUP1nwDAAAACHIehYpvv/1WvXv3VocOHZSRkaFjx45JkrKzs3mcLAAAANDIeBQqRo0apSZNmujgwYNq1qyZq/3ee+/V6tWrvVYcAAAAgMDn0ZqKNWvW6P3339fll1/u1t6+fXv94x//8EphAID6k5y3yifH5f0XANA4eDRTcfr0abcZinPKy8sVERFhuigAAAAAwcOjUHHLLbfo1VdfdX23WCyqra1VQUGBevXq5bXiAAAAAAQ+j25/KigoUO/evfXpp5/qzJkzevzxx1VSUqLy8nJt3LjR2zUCAAAACGAezVR06dJFe/fuVc+ePdW3b1+dPn1ad999t7Zv364rr7zS2zUCAAAACGB1nqmorq7WHXfcoblz5+rJJ5/0RU0AAAAAgkidZyqaNGmiL774whe1AAAAAAhCHt3+NGjQIC1YsMDbtQAAAAAIQh4t1D579qwWLlyoDz74QD169FBUVJTb9unTp3ulOAAAAACBr06h4ptvvlFycrJ27dql6667TpK0d+9etz4Wi8V71QEAAAAIeHUKFe3bt9exY8f04YcfSpLuvfdezZw5U/Hx8T4pDgAAAEDgq9OaCsMw3L6/9957On36tFcL+jlTp06VxWLRyJEjXW1VVVXKyclRy5Ytddlll6l///4qKytz2+/gwYPKzMxUs2bNFBcXp8cee0xnz56tt7oBAACAhsyjNRXnnB8yfGnr1q165ZVXdO2117q1jxo1SqtWrdKyZctktVo1YsQI3X333a6X8NXU1CgzM1MJCQnatGmTjh07piFDhqhJkyZ65pln6q1+IBAciBzo0X7JVUu8XAkAAGhI6jRTYbFYLlgzUR9rKCorK5WVlaX58+erefPmrvaKigotWLBA06dP169//Wv16NFDixYt0qZNm/TJJ59IktasWaPdu3frtddeU7du3fTb3/5WkydP1ssvv6wzZ874vHYAAACgoavTTIVhGBo2bJgiIiIk/XDr0X//939f8PSn5cuXe69CSTk5OcrMzFRaWpqmTJniat+2bZuqq6uVlpbmauvYsaPatGmj4uJi3XjjjSouLlbXrl3d1n2kp6frwQcfVElJibp3737B+ZxOp5xOp+u7w+Hw6vUAAAAADUmdQsXQoUPdvg8aNMirxVzM0qVL9dlnn2nr1q0XbLPb7QoPD1dsbKxbe3x8vOx2u6vP+QvJz30/1+d8+fn5mjhxoheqBwAAABq+OoWKRYsW+aqOizp06JAeeeQRrV27VpGRkfV23jFjxig3N9f13eFwqHXr1vV2fgAAACCYePRG7fqybds2HT9+XNddd53CwsIUFhamjz/+WDNnzlRYWJji4+N15swZnTx50m2/srIyJSQkSJISEhIueBrUue/n+pwvIiJCMTExbh8AAAAAFxfQoaJ3797auXOnduzY4fqkpKQoKyvL9b+bNGmioqIi1z6lpaU6ePCgbDabJMlms2nnzp06fvy4q8/atWsVExOjzp071/s1AQAAAA2NqUfK+lp0dLS6dOni1hYVFaWWLVu62rOzs5Wbm6sWLVooJiZGDz30kGw2m2688UZJUp8+fdS5c2cNHjxYBQUFstvtGjt2rHJy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",
      "text/plain": [
       "<Figure size 800x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "m = 10000\n",
    "X = np.array([np.random.beta(a=3, b=10, size=m), np.random.beta(a=2.4, b=18, size=m)]).T\n",
    "print(X.shape)\n",
    "df = pd.DataFrame(X, columns=['x0', 'x1'])\n",
    "histogram(df, colname='x0', num_bins=30)\n",
    "histogram(df, colname='x1', num_bins=30)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 126,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x0 max 0.7368845860579949\n",
      "x0 min 0.007798633870050978\n",
      "x1 max 0.4575042851833963\n",
      "x1 min 0.0016087578735220842\n",
      "x1 mean 0.11786293711025032\n",
      "x1 std 0.06858466834125022\n"
     ]
    }
   ],
   "source": [
    "print(f\"x0 max {X[:, 0].max()}\")\n",
    "print(f\"x0 min {X[:, 0].min()}\")\n",
    "print(f\"x1 max {X[:, 1].max()}\")\n",
    "print(f\"x1 min {X[:, 1].min()}\")\n",
    "print(f\"x1 mean {X[:, 1].mean()}\")\n",
    "print(f\"x1 std {X[:, 1].std()}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(10000,)\n",
      "0.7653977687339698 0.07975293624654826\n",
      "median 0.23404020909186973\n"
     ]
    }
   ],
   "source": [
    "y = X[:, 0] ** 2 + X[:, 1] + np.random.rand()/10\n",
    "print(y.shape)\n",
    "print(f\"{y.max()} {y.min()}\")\n",
    "print(f\"median {np.median(y)}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "y_median0.23404020909186973\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "3960"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_median = np.median(y)\n",
    "print(f\"y_median{y_median}\")\n",
    "y_median = y_median*0.9\n",
    "# yc = [yi > y_median for yi in y]\n",
    "yc = [yi > y_median for yi in y]\n",
    "yc_int = np.array([1 if yy else 0 for yy in yc])\n",
    "len([ycc for ycc in yc if ycc == False])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "test_y [0.24 0.26 0.19 0.11]\n",
      "test_y [ True  True False False]\n"
     ]
    }
   ],
   "source": [
    "test_x = np.array([[0.2, 0.2], [0.4, 0.1], [0.3, 0.1], [0.1, 0.1]])\n",
    "test_y = test_x[:, 0] ** 2 + test_x[:, 1]\n",
    "print(f\"test_y {test_y}\")\n",
    "print(f\"test_y {test_y > y_median}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### plot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "ipos = np.where(y > y_median)\n",
    "ineg = np.where(y <= y_median)\n",
    "len(ipos[0]), len(ineg[0])\n",
    "plt_x = X[:, 0]\n",
    "plt_y = X[:, 1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(plt_x[ipos], plt_y[ipos], label='Positive', color='b', s=25, marker=\"o\")\n",
    "plt.scatter(plt_x[ineg], plt_y[ineg], label='Negative', color='r', s=25, marker=\"x\")\n",
    "plt.xlabel('x0')\n",
    "plt.ylabel('x1')\n",
    "plt.title('Test')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# sklearn实现"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.naive_bayes import GaussianNB"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GaussianNB()"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nb = GaussianNB()\n",
    "nb.fit(X, yc)\n",
    "nb"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "jll [[-5.03137294  2.41335237]\n",
      " [-0.55285624  2.35897457]\n",
      " [-1.180792    0.16095171]\n",
      " ...\n",
      " [ 0.20137047  1.80364189]\n",
      " [-1.43879649  2.36973257]\n",
      " [ 3.36988095  1.44509076]]\n",
      "precision 0.9508410909684795\n",
      "recall 0.963907284768212\n",
      "roc_auc 0.9439485918790556\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import recall_score, precision_score, roc_curve, roc_auc_score, precision_recall_curve, average_precision_score\n",
    "y_pred = nb.predict(X)\n",
    "print(f\"precision {precision_score(y_true=yc, y_pred=y_pred)}\")\n",
    "print(f\"recall {recall_score(y_true=yc, y_pred=y_pred)}\")\n",
    "print(f\"roc_auc {roc_auc_score(yc, y_pred)}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 800x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fpr, tpr, thresholds = roc_curve(yc, y_pred)\n",
    "roc_auc = roc_auc_score(yc, y_pred)\n",
    "\n",
    "plt.figure(figsize=(8, 6))\n",
    "plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = {:.2f})'.format(roc_auc))\n",
    "plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')\n",
    "plt.xlim([0.0, 1.0])\n",
    "plt.ylim([0.0, 1.05])\n",
    "plt.xlabel('False Positive Rate')\n",
    "plt.ylabel('True Positive Rate')\n",
    "plt.title('Receiver Operating Characteristic (ROC) Curve')\n",
    "plt.legend(loc='lower right')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 手搓"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 概念\n",
    "如何预测, 有一个样本, 其特征0.1, 0.2 \n",
    "\n",
    "在特征值是0.1 0.2的条件下, 被分类为0/1的概率如下\n",
    "```\n",
    "p(y0|x0=0.1, x1=0.2) = p(y0, x0=0.1, x1=0.2) / p(x0=0.1) * p(x1=0.2)\n",
    "p(y1|x0=0.1, x1=0.2) = p(y1, x0=0.1, x1=0.2) / p(x0=0.1) * p(x1=0.2)\n",
    "```\n",
    "### 单变量好理解\n",
    "`p(y0|x0=0.1) = p(y0, x0=0.1) / p(x0=0.1)`\n",
    "\n",
    "- 公式右下, 是训练集统计出的特征先验概率\n",
    "- 公式右上, 可以展开成:  `p(x0=0.1|y0) * p(y0)`  即 似然 * 先验 / 置信 = 预测值(后验)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 连续特征分bin?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "70\n",
      "46\n"
     ]
    }
   ],
   "source": [
    "# housing[\"income_cat\"] = pd.cut(housing[\"median_income\"],\n",
    "#                                bins=[0., 1.5, 3.0, 4.5, 6., np.inf],\n",
    "#                                labels=[1, 2, 3, 4, 5])\n",
    "tx = np.copy(X)\n",
    "tx[:,0] = [int(txi/0.01) for txi in tx[:,0]]\n",
    "tx[:,1] = [int(txi/0.01) for txi in tx[:,1]]\n",
    "print(len(np.unique(tx[:,0])))\n",
    "print(len(np.unique(tx[:,1])))\n",
    "# print(np.unique(tx[:,0]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## y标签的先验概率"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(10000, {False: 3960, True: 6040}, array([3960, 6040]))"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# cost_bin_gp = df.groupby(by='cost_bin').size().reset_index(name=\"ct\").sort_values('cost_bin')\n",
    "y_df = pd.DataFrame(yc, columns=['y'])\n",
    "y_cnt = y_df.groupby(by='y').size().reset_index(name=\"ct\").sort_values('y')\n",
    "yc_total_cnt = y_cnt['ct'].sum()\n",
    "yc_cnt_dict = {yy['y']:yy['ct'] for xx,yy in y_cnt.iterrows()}\n",
    "y_cnt.y = [1 if yy else 0 for yy in y_cnt.y]\n",
    "yc_cnts = y_cnt.ct.values\n",
    "yc_total_cnt, yc_cnt_dict, yc_cnts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.3960208, 0.6039792])"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "yc_freq = (yc_cnts + 1) / (m + len(yc_cnts))\n",
    "yc_freq"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 特征在各分类下的似然 \n",
    "p(x0=0.1|y0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "likehood = np.zeros(shape=(2,2,100)) #第一方向y, 第二方向特征x0/x1, 第三方向, 特征的bin的索引其实不到100 \n",
    "likehood_p = np.zeros(shape=(2,2,100))\n",
    "# 第一遍统计频次\n",
    "for index, value in np.ndenumerate(tx):\n",
    "    label = yc[index[0]]\n",
    "    label = int(label)\n",
    "    i,j,k = (label, index[1], int(value))\n",
    "    likehood[i,j,k] += 1\n",
    "\n",
    "# 拉普拉斯平滑一下子\n",
    "likehood = likehood + len(yc_cnts)\n",
    "\n",
    "# 第二遍算频次\n",
    "for label in range(0, len(yc_cnts)):\n",
    "    likehood_p[label] = likehood[label] / ( yc_cnts[label] + 1 )\n",
    "\n",
    "# 汇总特征本身频率\n",
    "confidence = np.sum(likehood, axis=0)\n",
    "confidence = confidence / (m + len(yc_cnts))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.06563998990154002\n",
      "0.025994801039792043\n",
      "0.05644760801191856\n",
      "0.03409318136372726\n"
     ]
    }
   ],
   "source": [
    "print(likehood_p[0][1][10])\n",
    "print(likehood_p[0][1][10]*yc_freq[0])\n",
    "print(likehood_p[1][1][10])\n",
    "print(likehood_p[1][1][10]*yc_freq[1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 112,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x 0.1\n",
      "x所属bin 10\n",
      "x所属bin在y=0下的频率 0.04266599343600101\n",
      "x所属bin在y=1下的频率 0.01738122827346466\n",
      "x所属bin总频率 0.027394521095780843\n",
      "x 0.1\n",
      "x所属bin 10\n",
      "x所属bin在y=0下的频率 0.06563998990154002\n",
      "x所属bin在y=1下的频率 0.05644760801191856\n",
      "x所属bin总频率 0.027394521095780843\n",
      "后验概率0 p(y0| x0) =  p(x0|y0) * p(y0) /  p(x0) \n",
      "  0.6737783089630989\n",
      "后验概率1 p(y1| x0) =  p(x0|y1) * p(y1) /  p(x0) \n",
      "  0.3599951565529288\n",
      "False\n"
     ]
    }
   ],
   "source": [
    "#求 p(y0| x0=?, x1=?) =  p(x0=?|y0) * p(x1=?|y0) * p(y0) /  p(x0=?) * p(x1=?)\n",
    "for i in range(3, 4):\n",
    "    fe = test_x[i]\n",
    "    p0 = yc_freq[0]\n",
    "    p1 = yc_freq[1]\n",
    "    for fi in range(0, 2):\n",
    "        x_bin = int(fe[fi]/0.01)\n",
    "        print(f\"x {fe[fi]}\")\n",
    "        print(f\"x所属bin {x_bin}\")\n",
    "        # print(f\"x所属bin在y=0下的频率 {likehood[0][fi][x_bin]}\")\n",
    "        print(f\"x所属bin在y=0下的频率 {likehood_p[0][fi][x_bin]}\")\n",
    "        # print(f\"x所属bin在y=1下的频率 {likehood[1][fi][x_bin]}\")\n",
    "        print(f\"x所属bin在y=1下的频率 {likehood_p[1][fi][x_bin]}\")\n",
    "        print(f\"x所属bin总频率 {confidence[0][x_bin]}\")\n",
    "        p0 = p0 * likehood_p[0][fi][x_bin]/confidence[fi][x_bin]\n",
    "        p1 = p1 * likehood_p[1][fi][x_bin]/confidence[fi][x_bin]\n",
    "\n",
    "    print(f\"后验概率0 p(y0| x0) =  p(x0|y0) * p(y0) /  p(x0) \\n  {p0}\")\n",
    "    print(f\"后验概率1 p(y1| x0) =  p(x0|y1) * p(y1) /  p(x0) \\n  {p1}\")\n",
    "    print(not p0 > p1)\n",
    "    \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "def predict(test_x):\n",
    "    r = []\n",
    "    for i in range(0, len(test_x)):\n",
    "        fe = test_x[i]\n",
    "        p0 = yc_freq[0]\n",
    "        p1 = yc_freq[1]\n",
    "        for fi in range(0, 2):\n",
    "            x_bin = int(fe[fi]/0.01)\n",
    "            p0 = p0 * likehood_p[0][fi][x_bin]/confidence[fi][x_bin]\n",
    "            p1 = p1 * likehood_p[1][fi][x_bin]/confidence[fi][x_bin]\n",
    "        r.append((not p0 > p1))\n",
    "    return r"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(10000, 10000)"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_pred = predict(X)\n",
    "len(yc), len(y_pred)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "precision 0.9629568106312293\n",
      "recall 0.9597682119205299\n",
      "roc_auc 0.9517275403036993\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import recall_score, precision_score, roc_curve, roc_auc_score, precision_recall_curve, average_precision_score\n",
    "print(f\"precision {precision_score(y_true=yc, y_pred=y_pred)}\")\n",
    "print(f\"recall {recall_score(y_true=yc, y_pred=y_pred)}\")\n",
    "print(f\"roc_auc {roc_auc_score(yc, y_pred)}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 手搓-正态概率密度?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.11786293711025032"
      ]
     },
     "execution_count": 89,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.mean(X[:,0])\n",
    "np.mean(X[:,1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 104,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "统计y0 3960 特征0\n",
      "yi_mean 0.167165805834457\n",
      "yi_std 0.06959620125339538\n",
      "统计y0 3960 特征1\n",
      "yi_mean 0.06727037844080633\n",
      "yi_std 0.03072492931196012\n",
      "统计y1 6040 特征0\n",
      "yi_mean 0.27254368928451717\n",
      "yi_std 0.11512766726503063\n",
      "统计y1 6040 特征1\n",
      "yi_mean 0.1510328927941904\n",
      "yi_std 0.06626096529411545\n",
      "全体 特征0 0.23081404743829334, 0.1121594475464629\n",
      "全体 特征1 0.11786293711025032, 0.06858466834125022\n",
      "x0 均值 2308.1404743829335\n",
      "x1 均值 1178.6293711025032\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([[[0.16716581, 0.0695962 ],\n",
       "        [0.06727038, 0.03072493]],\n",
       "\n",
       "       [[0.27254369, 0.11512767],\n",
       "        [0.15103289, 0.06626097]],\n",
       "\n",
       "       [[0.23081405, 0.11215945],\n",
       "        [0.11786294, 0.06858467]]])"
      ]
     },
     "execution_count": 104,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# y的概率不用重算了\n",
    "\n",
    "# xi 在y0上的 均值和标准差\n",
    "# xi 在y1上的 均值和标准差\n",
    "# xi 在全体上的 均值和标准差\n",
    "mean_std = np.zeros(shape=(3,2,2)) #axis0: y0/y1/全体, axis1: 俩特征, axis2: 均值和标准差\n",
    "for i in range(0, 2): # len(yc_cnts)\n",
    "    ipos = np.where(yc_int == i)\n",
    "    for fi in range(0, 2):\n",
    "        print(f\"统计y{i} {len(ipos[0])} 特征{fi}\")\n",
    "        yi_mean = np.mean(X[ipos][:,fi])\n",
    "        yi_std = np.std(X[ipos][:,fi])\n",
    "        print(f\"yi_mean {yi_mean}\")\n",
    "        print(f\"yi_std {yi_std}\")\n",
    "        mean_std[i][fi] = [yi_mean, yi_std]\n",
    "\n",
    "for fi in range(0,2):\n",
    "    y_all_mean = np.mean(X[:,fi])\n",
    "    y_all_std = np.std(X[:,fi])\n",
    "    print(f\"全体 特征{fi} {y_all_mean}, {y_all_std}\")\n",
    "    mean_std[2][fi] = [y_all_mean, y_all_std]\n",
    "\n",
    "print(f\"x0 均值 {mean_std[0][0][0] * 3960 + mean_std[1][0][0] * 6040}\")\n",
    "print(f\"x1 均值 {mean_std[0][1][0] * 3960 + mean_std[1][1][0] * 6040}\")\n",
    "mean_std"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 140,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[[0.16716581, 0.0695962 ],\n",
       "        [0.06727038, 0.03072493]],\n",
       "\n",
       "       [[0.27254369, 0.11512767],\n",
       "        [0.15103289, 0.06626097]],\n",
       "\n",
       "       [[0.23081405, 0.11215945],\n",
       "        [0.11786294, 0.06858467]]])"
      ]
     },
     "execution_count": 140,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mean_std"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 116,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[0.2 0.2]\n",
      " [0.4 0.1]\n",
      " [0.3 0.1]\n",
      " [0.1 0.1]]\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "(0.167165805834457, 0.06959620125339538, array([0.16716581, 0.0695962 ]))"
      ]
     },
     "execution_count": 116,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "print(test_x)\n",
    "from scipy.stats import norm\n",
    "mean_, std_ = mean_std[0][0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 130,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x 0.1\n",
      "mean_, std_ (0.167165805834457, 0.06959620125339538)\n",
      "x所属bin在y=0下的频率 3.598144833548283\n",
      "x所属bin在y=0下的频率 1.1271587642181584\n",
      "x总频率 1.8017196594522529\n",
      "x 0.1\n",
      "mean_, std_ (0.06727037844080633, 0.03072492931196012)\n",
      "x所属bin在y=0下的频率 7.36226332435955\n",
      "x所属bin在y=0下的频率 4.475539497206249\n",
      "x总频率 5.622803593543138\n",
      "后验概率0 p(y0| x0) =  p(x0|y0) * p(y0) /  p(x0) \n",
      "  1.0355423114008446\n",
      "后验概率1 p(y1| x0) =  p(x0|y1) * p(y1) /  p(x0) \n",
      "  0.3007546431516544\n",
      "False\n"
     ]
    }
   ],
   "source": [
    "#求 p(y0| x0=?, x1=?) =  p(x0=?|y0) * p(x1=?|y0) * p(y0) /  p(x0=?) * p(x1=?)\n",
    "for i in range(3, 4):\n",
    "    fe = test_x[i] #len(test_x)\n",
    "    p0 = yc_freq[0]\n",
    "    p1 = yc_freq[1]\n",
    "    for fi in range(0, 2):\n",
    "        print(f\"x {fe[fi]}\")\n",
    "\n",
    "        mean_, std_ = mean_std[0][fi]\n",
    "        rv = norm(loc=mean_, scale=std_)\n",
    "        py0 = rv.pdf(fe[fi])\n",
    "        print(f\"mean_, std_ {mean_, std_}\")\n",
    "        print(f\"x所属bin在y=0下的频率 {py0}\")\n",
    "        \n",
    "        mean_, std_ = mean_std[1][fi]\n",
    "        rv = norm(loc=mean_, scale=std_)\n",
    "        py1 = rv.pdf(fe[fi])\n",
    "        print(f\"x所属bin在y=0下的频率 {py1}\")\n",
    "\n",
    "        mean_, std_ = mean_std[2][fi]\n",
    "        rv = norm(loc=mean_, scale=std_)\n",
    "        py2 = rv.pdf(fe[fi])\n",
    "        print(f\"x总频率 {py2}\")\n",
    "\n",
    "        p0 = p0 * py0/py2\n",
    "        p1 = p1 * py1/py2\n",
    "\n",
    "\n",
    "    print(f\"后验概率0 p(y0| x0) =  p(x0|y0) * p(y0) /  p(x0) \\n  {p0}\")\n",
    "    print(f\"后验概率1 p(y1| x0) =  p(x0|y1) * p(y1) /  p(x0) \\n  {p1}\")\n",
    "    print(not p0 > p1)\n",
    "    \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 134,
   "metadata": {},
   "outputs": [],
   "source": [
    "def predict1(test_x):\n",
    "    r = []\n",
    "    for i in range(0, len(test_x)):\n",
    "        fe = test_x[i]\n",
    "        p0 = yc_freq[0]\n",
    "        p1 = yc_freq[1]\n",
    "        for fi in range(0, 2):\n",
    "            mean_, std_ = mean_std[0][fi]\n",
    "            rv = norm(loc=mean_, scale=std_)\n",
    "            py0 = rv.pdf(fe[fi])\n",
    "            \n",
    "            mean_, std_ = mean_std[1][fi]\n",
    "            rv = norm(loc=mean_, scale=std_)\n",
    "            py1 = rv.pdf(fe[fi])\n",
    "\n",
    "            mean_, std_ = mean_std[2][fi]\n",
    "            rv = norm(loc=mean_, scale=std_)\n",
    "            py2 = rv.pdf(fe[fi])\n",
    "\n",
    "            p0 = p0 * py0/py2\n",
    "            p1 = p1 * py1/py2\n",
    "        r.append(not p0 > p1)\n",
    "\n",
    "    return r"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 138,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([[0.2, 0.2],\n",
       "        [0.4, 0.1],\n",
       "        [0.3, 0.1],\n",
       "        [0.1, 0.1]]),\n",
       " array([ True,  True, False, False]),\n",
       " [True, True, True, False])"
      ]
     },
     "execution_count": 138,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_x, test_y > y_median, predict1(test_x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 139,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_pred = predict1(X)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 141,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "precision 0.9508410909684795\n",
      "recall 0.963907284768212\n",
      "roc_auc 0.9439485918790556\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import recall_score, precision_score, roc_curve, roc_auc_score, precision_recall_curve, average_precision_score\n",
    "print(f\"precision {precision_score(y_true=yc, y_pred=y_pred)}\")\n",
    "print(f\"recall {recall_score(y_true=yc, y_pred=y_pred)}\")\n",
    "print(f\"roc_auc {roc_auc_score(yc, y_pred)}\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 结果\n",
    "```\n",
    "# sklearn的\n",
    "precision 0.9508410909684795\n",
    "recall 0.963907284768212\n",
    "roc_auc 0.9439485918790556\n",
    "\n",
    "# 我的bin\n",
    "precision 0.9629568106312293\n",
    "recall 0.9597682119205299\n",
    "roc_auc 0.9517275403036993\n",
    "\n",
    "# 我的高斯\n",
    "precision 0.9508410909684795\n",
    "recall 0.963907284768212\n",
    "roc_auc 0.9439485918790556\n",
    "```"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "mlflow-dev-env",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
